ReplicaSet
- ReplicaSet 是 Kubernetes 中最基本的控制器之一,用於確保指定數量的 Pod 副本在叢集中運作。 ReplicaSet 透過定義 Pod 範本來建立和管理 Pod,以便在副本數量變更時自動進行擴充或縮減。 以下是 ReplicaSet 的一些關鍵特性:
- Pod 副本管理: ReplicaSet 負責建立和維護一定數量的 Pod 副本,確保它們在健康的節點上運作。
- 標籤選擇器: 使用標籤選擇器,ReplicaSet 可以精確選擇要管理的 Pod 集合。
- 自動伸縮: ReplicaSet 可以根據定義的副本數量自動伸縮,以適應應用程式的負載變化。
- 版本控制: 透過更新 Pod 模板,您可以實現應用程式的版本控制和升級。
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
StatefulSet
- StatefulSet 是用於管理有狀態應用程式的控制器。 與 ReplicaSet 不同,StatefulSet 確保 Pod 具有穩定的網路識別碼和有序的部署/擴展。 這對於需要有狀態應用程式(如資料庫)非常重要。 以下是 StatefulSet 的一些關鍵特性:
- 穩定的 label: StatefulSet 為每個 Pod 分配一個穩定的網路 label ,通常是基於其名稱。也就是說StatefulSet controller 為每個 pod 產生固定的識別資訊,不因 pod reschedule 後有變動。
- 有序部署: StatefulSet 可確保 Pod 的有序部署和擴展,這對於依賴其他 Pod 的應用程式非常重要。
- 有狀態儲存: StatefulSet 可以管理與 Pod 關聯的持久化存儲,確保資料不會在 Pod 重新部署時遺失。
- 有序終止: StatefulSet 可以依照特定的順序終止 Pod,以確保資料完整性。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-statefulset
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest